/**
 * @author scylla
 * @version V1.0
 * @Project echo-java-base
 * @Title 后台线程
 * @Description *
 * @Package concurrent.mthread.daemon
 * @Since 2021/7/27 1:38 下午
 */
package concurrent.mthread.daemon;

import java.util.concurrent.TimeUnit;

public class SimpleDaemons implements Runnable {
    @Override
    public void run() {
        try {
            while (true) {
                TimeUnit.SECONDS.sleep(1);
                System.out.println(Thread.currentThread() + " " + this);
            }
        } catch (InterruptedException e) {
            System.out.println("sleep() interrupted");
        }
    }

    /**
     * main() 属于一种非后台线程。
     *
     * <p>
     *  后台线程: 指在程序运行的时候在后台提供一种通用服务的线程，并且这种线程
     * 并不属于程序中不可或缺的部分。因此，当所有的非后台线程结束时，程序也就终止了，
     * 同时还会杀死进程中所有的后台线程。
     *
     * 反过来说： 只要有任何非后台线程还在运行，程序就不会终止。
     * <p/>
     *
     * @author chentl
     * @since 1:43 下午 2021/7/27
     * @param args
     * @return
     **/
    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i < 10; i++) {
            Thread daemon = new Thread(new SimpleDaemons());
            //显示调用设置后台线程
            daemon.setDaemon(true);
            //启动后台线程
            daemon.start();
        }
        System.out.println("All daemons started");
        TimeUnit.MILLISECONDS.sleep(5000);

    }
}
